<?php
	/**
	  * @name		MySQLAdvanced
	  * @brief		Clase para crear, modificar, eliminar bases de datos, tablas, y otros, en servidores MySQL
	  * @author		Hermann D. Schimpf <hschimpf@gschimpf.com>
	  * @license	http://www.gnu.org/licenses/gpl.html
	  *				MySQLAdvanced - Clase para crear, modificar, eliminar bases de datos, tablas, y otros, en servidores MySQL
	  *				Copyright © 2010 Hermann D. Schimpf
	  *				Este programa es software libre: usted puede redistribuirlo y/o modificarlo conforme a los términos de la Licencia Pública General de GNU publicada por la Fundación para el Software Libre, ya sea la versión 3 de esta Licencia o (a su elección) cualquier versión posterior.
	  *				Este programa se distribuye con el deseo de que le resulte útil, pero SIN GARANTÍAS DE NINGÚN TIPO; ni siquiera con las garantías implícitas de COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO DETERMINADO. Para más información, consulte la Licencia Pública General de GNU.
	  *				Junto con este programa, se debería incluir una copia de la Licencia Pública General de GNU. De no ser así, ingrese a http://www.gnu.org/licenses
	  * @date		2010-02-15
	  * @version	0.1.0
  	**/

	final class MySQLAdvanced extends MySQLProcess implements SQLAdvanceds, MyVersions {
		/**
		  * Version de la clase
		  * @access	private
		  * @static
		  * @name	$version
		**/
		private static $version			= 0;
		/**
		  * Subversion de la clase
		  * @access	private
		  * @static
		  * @name	$subversion
		**/
		private static $subversion		= 1;
		/**
		  * Revision de la clase
		  * @access	private
		  * @static
		  * @name	$revision
		**/
		private static $revision		= 0;

		/**
		  * Constructor de la clase
		  * @access	public
		  * @param	Boolean	$debug Valor booleano para habilitar la depuracion de la clase
		  * @return	Void		Este metodo no retorna valores
		 **/
		public function __construct($debug = False) {
			/* creamos el padre */
			parent::__construct($debug, __CLASS__);
		}

		/**
		  * Destructor de la clase
		  * @access	public
		  * @return	Vsoid		Este metodo no retorna valores
		 **/
		public function __destruct() {
			/* matamos el padre */
			parent::__destruct();
		}

		/**
		  * Metodo para obtener la version de la clase
		  * @access	public
		  * @static
		  * @return	String	Retorna la version de la clase con el formato: v{version}.{subversion}.{revision}
		 **/
		public static function getVersion() {
			/* retornamos la version actual de la clase */
			return 'v' . self::$version . '.' . self::$subversion . '.' . self::$revision;
		}

		/**
		  * Metodo para capturar excepciones en la ejecucion de los metodos
		  * @access	private
		  * @param	String	$method	Nombre del metodo a ejecutar
		  * @return	Void		Este metodo no retorna valores
		 **/
		private function catchExceptions($method = Null) {
			/* ingresamos a un control de errores para capturar mis excepciones */
			try {
				/* ingresamos a un control de errores para capturar las excepciones de ejecucion */
				try {
					/* realizamos algunas verificaciones */
					$this->verificarMetodo($method);
					/* obtenemos los parametros recibidos */
					$args = func_get_args();
					/* llamamos al metodo con los parametros */
					call_user_func_array(Array(__CLASS__, $method), $this->buildArgs($args));
				/* capturamos las excepciones */
				} catch (Exception $e) {
					/* capturamos todos los errores y los transformamos en mi excepcion */
					$this->newException($e);
				}
			/* capturamos mis excepciones */
			} catch (MyException $e) {
				/* si se produjo una excepcion la manejamos con el metodo 'show' */
				$this->show($e->getMensaje());
			}
		}
	}
?>